/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.perutaxi.datos;

import com.perutaxi.entidades.eCliente;
import com.perutaxi.entidades.eClienteReclamo;
import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

/**
 *
 * @author PeruTaxi
 */
public class dClienteReclamo implements Serializable {

    public static Date obtenerFechaActual() {
        Calendar calendario = Calendar.getInstance();
        return calendario.getTime();
    }

    public static eClienteReclamo inicializar() {
        eClienteReclamo clienteReclamo = new eClienteReclamo();
        clienteReclamo.setCliente(new eCliente());
        clienteReclamo.setNombreTaxista("");
        clienteReclamo.setApPaternoTaxista("");
        clienteReclamo.setApMaternoTaxista("");
        clienteReclamo.setDniTaxista("");
        clienteReclamo.setMotivo("");
        clienteReclamo.setComentario("");
        clienteReclamo.setEstado("P");

        return clienteReclamo;
    }

    public static eClienteReclamo obtenerPorId(Long id) throws Exception {
        eClienteReclamo clienteReclamo = new eClienteReclamo();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_RECLAMO WHERE ID = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                clienteReclamo.setId(rs.getLong(1));
                clienteReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clienteReclamo.setNombreTaxista(rs.getString(3));
                clienteReclamo.setApPaternoTaxista(rs.getString(4));
                clienteReclamo.setApMaternoTaxista(rs.getString(5));
                clienteReclamo.setDniTaxista(rs.getString(6));
                clienteReclamo.setFechaIncidente(rs.getTimestamp(7));
                clienteReclamo.setMotivo(rs.getString(8));
                clienteReclamo.setComentario(rs.getString(9));
                clienteReclamo.setEstado(rs.getString(10));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return clienteReclamo;
    }

    public static List<eClienteReclamo> obtenerPorIdCliente(Long id) throws Exception {
        List<eClienteReclamo> lista = new ArrayList<eClienteReclamo>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_RECLAMO WHERE CLIENTE = " + id;
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eClienteReclamo clienteReclamo = new eClienteReclamo();
                clienteReclamo.setId(rs.getLong(1));
                clienteReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clienteReclamo.setNombreTaxista(rs.getString(3));
                clienteReclamo.setApPaternoTaxista(rs.getString(4));
                clienteReclamo.setApMaternoTaxista(rs.getString(5));
                clienteReclamo.setDniTaxista(rs.getString(6));
                clienteReclamo.setFechaIncidente(rs.getTimestamp(7));
                clienteReclamo.setMotivo(rs.getString(8));
                clienteReclamo.setComentario(rs.getString(9));
                clienteReclamo.setEstado(rs.getString(10));
                lista.add(clienteReclamo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eClienteReclamo> obtenerMisUltimosReclamos(Long id) throws Exception {
        List<eClienteReclamo> lista = new ArrayList<eClienteReclamo>();
        int cont = 0;
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_RECLAMO WHERE CLIENTE = " + id + " ORDER BY ID DESC";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                cont++;
                if (cont <= 5) {
                    eClienteReclamo clienteReclamo = new eClienteReclamo();
                    clienteReclamo.setId(rs.getLong(1));
                    clienteReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                    clienteReclamo.setNombreTaxista(rs.getString(3));
                    clienteReclamo.setApPaternoTaxista(rs.getString(4));
                    clienteReclamo.setApMaternoTaxista(rs.getString(5));
                    clienteReclamo.setDniTaxista(rs.getString(6));
                    clienteReclamo.setFechaIncidente(rs.getTimestamp(7));
                    clienteReclamo.setMotivo(rs.getString(8));
                    clienteReclamo.setComentario(rs.getString(9));
                    clienteReclamo.setEstado(rs.getString(10));
                    lista.add(clienteReclamo);
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static List<eClienteReclamo> obtenerTodos() throws Exception {
        List<eClienteReclamo> lista = new ArrayList<eClienteReclamo>();
        Connection cnx = Conexion.getConexion();
        String query = "SELECT * FROM CLIENTE_RECLAMO";
        try {
            PreparedStatement ps = cnx.prepareCall(query);
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                eClienteReclamo clienteReclamo = new eClienteReclamo();
                clienteReclamo.setId(rs.getLong(1));
                clienteReclamo.setCliente(dCliente.obtenerPorId(rs.getLong(2)));
                clienteReclamo.setNombreTaxista(rs.getString(3));
                clienteReclamo.setApPaternoTaxista(rs.getString(4));
                clienteReclamo.setApMaternoTaxista(rs.getString(5));
                clienteReclamo.setDniTaxista(rs.getString(6));
                clienteReclamo.setFechaIncidente(rs.getTimestamp(7));
                clienteReclamo.setMotivo(rs.getString(8));
                clienteReclamo.setComentario(rs.getString(9));
                clienteReclamo.setEstado(rs.getString(10));
                lista.add(clienteReclamo);
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            cnx.close();
        }

        return lista;
    }

    public static boolean guardar(eClienteReclamo clienteReclamo) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "INSERT INTO CLIENTE_RECLAMO VALUES (?,?,?,?,?,?,?,?,?,?)";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, clienteReclamo.getId());
            ps.setLong(2, clienteReclamo.getCliente().getId());
            ps.setString(3, clienteReclamo.getNombreTaxista().toUpperCase());
            ps.setString(4, clienteReclamo.getApPaternoTaxista().toUpperCase());
            ps.setString(5, clienteReclamo.getApMaternoTaxista().toUpperCase());
            ps.setString(6, clienteReclamo.getDniTaxista().toUpperCase());
            ps.setTimestamp(7, clienteReclamo.getFechaIncidente());
            ps.setString(8, clienteReclamo.getMotivo().toUpperCase());
            ps.setString(9, clienteReclamo.getComentario().toUpperCase());
            ps.setString(10, clienteReclamo.getEstado().toUpperCase());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }

        return retorno;
    }

    public static boolean actualizar(eClienteReclamo clienteReclamo) throws Exception {
        boolean retorno = true;
        Connection cnx = Conexion.getConexion();
        String query = "UPDATE CLIENTE_RECLAMO SET CLIENTE = ?, NOMBRE_TAXISTA = ?, AP_PATERNO_TAXISTA = ?, AP_MATERNO_TAXISTA = ?, DNI_TAXISTA = ?, ";
        query += "FECHA_INCIDENTE = ?, MOTIVO = ?, COMENTARIO = ?, ESTADO = ? WHERE ID = ?";
        try {
            PreparedStatement ps = cnx.prepareStatement(query);
            ps.setLong(1, clienteReclamo.getCliente().getId());
            ps.setString(2, clienteReclamo.getNombreTaxista().toUpperCase());
            ps.setString(3, clienteReclamo.getApPaternoTaxista().toUpperCase());
            ps.setString(4, clienteReclamo.getApMaternoTaxista().toUpperCase());
            ps.setString(5, clienteReclamo.getDniTaxista().toUpperCase());
            ps.setTimestamp(6, clienteReclamo.getFechaIncidente());
            ps.setString(7, clienteReclamo.getMotivo().toUpperCase());
            ps.setString(8, clienteReclamo.getComentario().toUpperCase());
            ps.setString(9, clienteReclamo.getEstado().toUpperCase());
            ps.setLong(10, clienteReclamo.getId());
            ps.execute();
        } catch (Exception e) {
            e.printStackTrace();
            retorno = false;
        } finally {
            cnx.close();
        }


        return retorno;
    }
}